package com.annotation.demo4;

import java.lang.reflect.Field;

/**
 * @ClassName SqlGenerate
 * @Description TODO
 * @Author Kx
 * @Date 2025/3/28 15:58
 * @Version 1.0
 */
public class SqlGenerate {

    /***
     * @author: kx
     * @date: 2025/3/28 15:58
     * @param clazz : 需要查询的类
     * @return java.lang.String
     * @description: 获取查询的sql语句
    */
    public static String generateSelect(Class<?> clazz){
        // 获取所有字段
        Field[] declaredFields = clazz.getDeclaredFields();

        // sql语句
        StringBuilder sql = new StringBuilder();

        // 拼接sql语句
        sql.append("select ");

        for (Field field : declaredFields){
            // 判断是否有Table注解
            if (field.isAnnotationPresent(Column.class)){
                // 获取注解的实例
                Column annotation = field.getAnnotation(Column.class);

                // 拼接sql语句
                sql.append(annotation.value()).append(",");
            } else {
                // 拼接sql语句
                sql.append(field.getName()).append(",");
            }
        }

        // 去除最后一个逗号
        sql.deleteCharAt(sql.length() - 1);

        // 拼接sql语句
        sql.append(" from ");

        // 判断类是否有注解
        if (clazz.isAnnotationPresent(Table.class)){
            // 获取注解的实例
            Table annotation = clazz.getAnnotation(Table.class);

            // 拼接有注解的sql表名
            sql.append(annotation.value());
        } else {
            // 拼接没有注解的sql表名
            sql.append(clazz.getSimpleName().toLowerCase());
        }

        return sql.toString();
    }
}
